# 基础镜像：官方 JDK 21（选择 slim 版本减小体积，或 jdk:21 完整版）
FROM openjdk:21-jdk-slim AS build-stage

RUN apt-get update && apt-get install -y --no-install-recommends --fix-missing \
    wget \
    unzip \
    && rm -rf /var/lib/apt/lists/*

# 2. 定义要安装的 Maven 版本（可根据需求修改，如 3.9.6、3.8.8 等）
ARG MAVEN_VERSION=3.9.6
ARG MAVEN_HOME=/opt/maven

# 3. 下载 Maven 并解压到指定目录
RUN wget -q https://archive.apache.org/dist/maven/maven-3/${MAVEN_VERSION}/binaries/apache-maven-${MAVEN_VERSION}-bin.zip -O /tmp/maven.zip \
    && unzip /tmp/maven.zip -d /opt/ \
    && ln -s /opt/apache-maven-${MAVEN_VERSION} ${MAVEN_HOME}  \
    && rm /tmp/maven.zip

# 4. 配置环境变量：将 Maven 的 bin 目录加入 PATH，确保能直接执行 mvn 命令
ENV PATH=${MAVEN_HOME}/bin:${PATH}

# 5. 验证 Maven 和 JDK 版本（可选，用于构建时确认环境正确）
RUN mvn -v && java -version

# 6. 设置工作目录（后续复制项目代码、执行构建的基础目录）
WORKDIR /app

# 7. 复制项目的 pom.xml 到工作目录（先复制 pom.xml，利用 Docker 缓存机制，依赖不变时无需重新下载）
COPY pom.xml .

# 8. 下载 Maven 依赖（可选，提前下载依赖，后续代码修改时无需重复下载）
RUN mvn dependency:go-offline -B

# 9. 复制项目所有源代码到工作目录
COPY src ./src

# 10. 执行构建命令（如打包，根据需求调整）
RUN mvn clean package

# ------------------------------
# （可选）多阶段构建：最终运行镜像（用轻量的 JRE 减小体积，仅保留构建产物）
FROM openjdk:21-jdk-slim AS runtime-stage

# 从构建阶段复制打包好的 Jar 包到运行阶段（路径需与构建阶段的输出一致，如 target/xxx.jar）
COPY --from=build-stage /app/target/demo-test-0.0.1-SNAPSHOT.jar /app/app.jar

# 暴露端口（根据项目需求调整）
EXPOSE 8090

# 启动命令
ENTRYPOINT ["java", "-jar", "/app/app.jar"]